//
//  XMGTabBarViewController.m
//  BuDeJie
//
//  Created by Avril on 2020/3/15.
//  Copyright © 2020 Avril. All rights reserved.
//

#import "XMGTabBarController.h"
#import "XMGMeViewController.h"
#import "XMGNewViewController.h"
#import "XMGEssenceViewController.h"
#import "XMGFriTrendViewController.h"
#import "XMGPublishViewController.h"
#import "../../Other/Category/UIImage+Rendar.h"
#import "../../Other/Category/UITabBarItem+Font.h"
/***
 1.给UITabBar里面的按钮设置内容=》UITabBar里面的按钮对应的子控制器的tabBarItem决定
 **/

/***
 还需要解决的问题：
 
 iOS7之后，UITabBar上的按钮只要被选中，就会默认被渲染（tintColor，默认蓝色）
 1、按钮被选中，图片被渲染：解决办法：1、直接修改图片,在xcode里 2、通过代码
 2、按钮被选中，文字颜色和字体
 3、中间发布按钮显示不出来：原因是ios7之后默认图片会被渲染。
 
 中间图片为什么会被渲染？中间图片太大，系统就自动渲染。

//系统UITabBarButton,只有选中状态。

 
 ***/

@interface XMGTabBarController ()

@property (nonatomic,weak) UIButton *plusButton;

@end

@implementation XMGTabBarController

// 程序一启动就会加载类到内存
//调用一次
+(void)load{
    
    //获取UITabBarItem外观
    UITabBarItem *item = [UITabBarItem appearance];

      //设置系统UITabBarButton的字体=》tabBarItem
      //富文本属性：文字字体，颜色，图文混排（html5）
      //字体
      NSMutableDictionary *attr = [NSMutableDictionary dictionary];
     // attr[NSForegroundColorAttributeName] = [UIColor blueColor];
      attr[NSFontAttributeName] = [UIFont systemFontOfSize:18.0f];
      [item setTitleTextAttributes:attr forState:UIControlStateNormal];
    
    //不能通过这样设置
    //item.title = @"123";
    
    /**
     appearance
     1、谁可以使用appearance必须遵守UIAppearance协议，实现协议方法
     2、使用appearance，不可以设置任何属性
     2.1、哪些属性可以通过appearance设置，只有带有UI_APPEARANCE_SELECTOR宏的属性或者方法，才可以通过appearance调用
     3.1、如果通过appearance设置属性，必须要在显示之前设置
     ***/
}

////第一次使用当前类或者i子类的时候也会调用
////可能会调用多次
//+(void)initialize{
//
//    //只能调用一次方法1，加个判断
//    if (self == [XMGTabBarController class]) {
//
//    }
//
//    //只能调用一次方法2，用dispatch_once,
//    static dispatch_once_t onceToken;
//    dispatch_once(&onceToken,^{
//
//    });
//}

-(UIButton *)plusButton{
    
    if (_plusButton == nil) {
        
           //创建加号按钮
          /***
           注意：这里不能写为：
           _plusButton = [UIButton buttonWithType:UIButtonTypeCustom];
           因为_plusButton是弱指针，执行完这一句即被销毁。
           所以必须写为：
           UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
           _plusButton = btn;
           因为ARC下，所有局部变量默认都为强指针。
           ***/
           UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
           _plusButton = btn;
           [btn setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
           [btn setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
           //自适应,btn自适应image的大小
           [btn sizeToFit];
           
        /***
        不能用这个，因为self.tabBar.center（由于tabbar是加在contorller的viw上的，这个center是相对于整个view的，Y值很大，比如220）赋值给btn.center，btn是加在tabbar上的，center就相对于tabbar的，此时center的Y还是220的话btn就会移出屏幕，所以不能用这种方式。
         **/
           //btn.center = self.tabBar.center;
           btn.center = CGPointMake(self.tabBar.bounds.size.width*0.5, self.tabBar.bounds.size.height*0.5);
           [self.tabBar addSubview:btn];
    }
    
    return _plusButton;
}

/***
 系统的UITabBarButton什么时候添加的？
 由于plusButton在内，UITabBarItem在外，所以推断UITabBarItem在plusButton之后添加到view上的。
 通过遍历self.tabBar.subViews来验证何时添加的。
 ****/

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //self.tabBar.tintColor = [UIColor redColor];
    
    self.plusButton.center= CGPointMake(self.tabBar.bounds.size.width*0.5, self.tabBar.bounds.size.height*0.5);
    [self.tabBar addSubview:self.plusButton];
    
    self.tabBar.tintColor = [UIColor blackColor];//设置渲染颜色
    //添加所有的子控制器
    [self addAllChildViewController];
    //设置UITabBar上所有按钮内容
    [self setupAllTabBarButton];
    
    NSLog(@"%@",self.tabBar.subviews);
    /***
     2020-04-03 20:54:09.713983+0800 BuDeJie[14950:258914] (
         "<UIButton: 0x7fa9fdc0a8c0; frame = (163 0; 49 49); opaque = NO; layer = <CALayer: 0x6000031f41c0>>"
     )
     此时只有UIButton，说明UITabBarItem并不是在viewDidLoad中添加的。
     
     ***/
}

-(void)viewWillAppear:(BOOL)animated{
    
    [super viewWillAppear:animated];
    NSLog(@"%@",self.tabBar.subviews);
    
    /**
     打印结果
     (
         "<UIButton: 0x7f971b706080; frame = (163 0; 49 49); opaque = NO; layer = <CALayer: 0x6000007d91c0>>",
         "<UITabBarButton: 0x7f971b41c0f0; frame = (0 0; 37 49); opaque = NO; layer = <CALayer: 0x6000007d7260>>",
         "<UITabBarButton: 0x7f971b60c1d0; frame = (0 0; 37 49); opaque = NO; layer = <CALayer: 0x60000078c820>>",
         "<UITabBarButton: 0x7f971b618960; frame = (0 0; 2 49); alpha = 0.25; opaque = NO; layer = <CALayer: 0x60000078c960>>",
         "<UITabBarButton: 0x7f971b618c10; frame = (0 0; 37 49); opaque = NO; layer = <CALayer: 0x60000078cb00>>",
         "<UITabBarButton: 0x7f971b619160; frame = (0 0; 37 49); opaque = NO; layer = <CALayer: 0x60000078cd20>>"
     )
     
     说明，UITabBarButton可能是在viewWillAppear中添加的。
     ****/

}

/**
 想让自己加载图片的地方也有插件提示=》修改插件=〉寻找插件=》执行完插件源码，就有插件=〉install
 
 ***/

#pragma mark
//设置UITabBar上所有按钮内容
-(void)setupAllTabBarButton{
    //0=》tabBarVC的第0个控制器
    //0
    UINavigationController *nav = self.childViewControllers[0];
    //给tabbar设置标题方法1，通过tabbar的子控制器，这里是nav
    nav.tabBarItem.title = @"精华";
    nav.tabBarItem.image = [UIImage imageNamed:@"tabBar_essence_icon"];
    UIImage *selImage = [UIImage imageNamedWithOriginal:@"tabBar_essence_click_icon"];
    nav.tabBarItem.selectedImage = selImage;

    
//给tabbar设置标题方法2，通过tabbar的子控制器nav的栈顶控制器，必须把title和image一起赋值才能设置成功标题。两个条件缺一不可。
//    XMGEssenceViewController *vc = nav.topViewController;
//    vc.tabBarItem.title = @"精华";
//    vc.tabBarItem.image = [UIImage imageNamed:@"tabBar_essence_icon"];
    
    //1
    UINavigationController *nav1 = self.childViewControllers[1];
    //给tabbar设置标题方法1，通过tabbar的子控制器，这里是nav
    nav1.tabBarItem.title = @"新帖";
    nav1.tabBarItem.image = [UIImage imageNamed:@"tabBar_new_icon"];
    nav1.tabBarItem.selectedImage = [UIImage imageNamedWithOriginal:@"tabBar_new_click_icon"];

    
    //2
    UIViewController *vc = self.childViewControllers[2];
//又遇到问题，点击中间plusButton，由于第三个tabBarItem在plusButton的外面，所以会截获plusbutton的点击事件，所以需要吧中间的tabBarItem按钮的点击事件禁用。
    vc.tabBarItem.enabled = NO;
//    //给tabbar设置标题方法1，通过tabbar的子控制器，这里是nav
//    vc.tabBarItem.image = [UIImage imageNamedWithOriginal:@"tabBar_publish_icon"];
//    vc.tabBarItem.selectedImage = [UIImage imageNamedWithOriginal:@"tabBar_publish_click_icon"];
//    //设置中间图片的位置
//    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(7, 0, -7, 0);
    
    //3
    UINavigationController *nav3 = self.childViewControllers[3];
    //给tabbar设置标题方法1，通过tabbar的子控制器，这里是nav
    nav3.tabBarItem.title = @"关注";
    nav3.tabBarItem.image = [UIImage imageNamed:@"tabBar_friendTrends_icon"];
    nav3.tabBarItem.selectedImage =[UIImage imageNamedWithOriginal:@"tabBar_friendTrends_click_icon"];

    //4
    UINavigationController *nav4 = self.childViewControllers[4];
    //给tabbar设置标题方法1，通过tabbar的子控制器，这里是nav
    nav4.tabBarItem.title = @"我";
    nav4.tabBarItem.image = [UIImage imageNamed:@"tabBar_me_icon"];
    nav4.tabBarItem.selectedImage = [UIImage imageNamedWithOriginal:@"tabBar_me_click_icon"];

}

-(void)addAllChildViewController{
    
        //添加导航控制器为tabbarVC子控制器
        //tabbarVC默认会把第0个子控制器的view添加上去
        //精华
        XMGEssenceViewController *vc = [[XMGEssenceViewController alloc]init];
        vc.view.backgroundColor = [UIColor redColor];
        
        //创建导航控制器
        //导航控制器会把根控制器的view添加到自己的view上
        //initWithRootViewController实际上包括了pushViewController的操作，
        //导航控制器push，把控制器压入栈
    //导航控制器会把栈顶控制器的view添加上去=》导航控制器显示到最外面的view，栈顶控制器view
        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];
        [self addChildViewController:nav];
        
        //1、新帖
        XMGNewViewController *vc1 = [[XMGNewViewController alloc]init];
         vc1.view.backgroundColor = [UIColor greenColor];
        UINavigationController *nav1 = [[UINavigationController alloc]initWithRootViewController:vc1];
        [self addChildViewController:nav1];
    
        //2、发布
        UIViewController *vc2 = [[UIViewController alloc]init];
         vc2.view.backgroundColor = [UIColor blueColor];
        [self addChildViewController:vc2];

        //3、关注
        XMGFriTrendViewController *vc3 = [[XMGFriTrendViewController alloc]init];
         vc3.view.backgroundColor = [UIColor orangeColor];
        UINavigationController *nav3 = [[UINavigationController alloc]initWithRootViewController:vc3];
        [self addChildViewController:nav3];

        //4、我
        XMGMeViewController *vc4 = [[XMGMeViewController alloc]init];
         vc4.view.backgroundColor = [UIColor yellowColor];
        UINavigationController *nav4 = [[UINavigationController alloc]initWithRootViewController:vc4];
        [self addChildViewController:nav4];
}
/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
